perm filename IJVAR.SAI[PIX,HPM] blob sn#447305 filedate 1979-06-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "VARIAN"
C00006 00003	INTEGER I,J,K,NF
C00010 ENDMK
C⊗;
BEGIN "VARIAN"
DEFINE VRN='350;		comment device 350, gents;
comment
  CONO/CONI bits for the VRN (Varian Plotter)
  for the meanings of most of these bits, refer to the
  Varian "SERVICE AND MAINTENANCE MANUAL STATOS 41/42 SERIES PRINTER/PLOTTERS";

DEFINE 
SCNCMP='100000	, comment scan completed	(reado);
NOTRDY='40000	, comment device not ready	(reado);
BUFBZY='20000	, comment buffer busy		(reado);
PRCBZY='10000	, comment paper controller busy	(reado);
FRMBOT='4000	, comment bottom of form	(reado);
REDRDY='1000	, comment read ready		(reado);
NOTONL='400	, comment not on line		(reado);
SUPPLO='200	, comment supplies low		(reado);
VIDBZY='100	, comment video busy		(reado);
INTTST='40	, comment interface test mode	(writo);
DATARQ='20	, comment data request		(reado);
INTENA='10	, comment interrupt enable	(readw);
PIEN33='4	, comment PI bit 33		(readw);
PIEN34='2	, comment PI bit 34		(readw);
PIEN35='1	; comment PI bit 35		(readw);

DEFINE RASTERWRITE='740;
DEFINE LINESYNC='443;
DEFINE RESETAUTO='445;
DEFINE ONESTEP='464;
DEFINE SLEW='665;

REQUIRE "VIXHDR.SAI[VIS,HPM]" SOURCE_FILE;

INTEGER CMDCNT,CMDRUN,CMDWD,RUNCNT,FOO,OCH; BOOLEAN LINES;

PROCEDURE VSINIT; BEGIN
    OCH←GETCHAN;
    OPEN(OCH,"DSK",0,0,19,1,FOO,FOO); ENTER(OCH,"VARIAN.DAT[TMP,HPM]",FOO);
    CMDCNT←0; RUNCNT←0; CMDWD←0; CMDRUN←0; END;
REQUIRE VSINIT INITIALIZATION;

REQUIRE "{}{}" DELIMITERS;
DEFINE VSEND={
   CMDCNT←CMDCNT+1; CMDWD←(CMDWD LSH 9) LOR CMD;
   IF CMDCNT=4 THEN
      BEGIN
      IF CMDWD=(CMDWD ROT 18) THEN 
	 IF CMDWD=CMDRUN THEN  RUNCNT←RUNCNT+1 ELSE
	    BEGIN
	    IF RUNCNT=1 THEN OUT(OCH,CVOS(CMDRUN)&'15&'12) ELSE
	    IF RUNCNT>1 THEN
               OUT(OCH,CVOS(('770 LSH 27)+(RUNCNT LSH 18)+(CMDRUN LAND '777777))&'15&'12);
	    RUNCNT←1; CMDRUN←CMDWD;
	    END
      ELSE
	 BEGIN
         IF RUNCNT=1 THEN OUT(OCH,CVOS(CMDRUN)&'15&'12) ELSE
         IF RUNCNT>1 THEN
            OUT(OCH,CVOS(('770 LSH 27)+(RUNCNT LSH 18)+(CMDRUN LAND '777777))&'15&'12);
         RUNCNT←0; CMDRUN←0;
	 OUT(OCH,CVOS(CMDWD)&'15&'12);
	 END;
      CMDCNT←0; CMDWD←0;
      END};
INTEGER I,J,K,NF;
PRINT("Number of bit files:"); NF←CVD(INCHWL);
PRINT("Outlines?"); LINES←(INCHWL LAND '137)="Y";

   BEGIN "BIT FILE"
   STRING ARRAY SF[1:NF];
   INTEGER ARRAY PIC[1:NF,0:10]; INTEGER ARRAY PCH[1:NF];

   FOR I←1 STEP 1 UNTIL NF DO
      BEGIN  DO PRINT("BIT FILE ",I,":") UNTIL PFLDIM(SF[I]←INCHWL)>0;
             PCH[I]←OPNPFL(SF[I],PIC[I,0]);  END;

      BEGIN  INTEGER CMD,MAXL;
      CMD←RASTERWRITE; VSEND; CMD←LINESYNC; VSEND; CMD←RESETAUTO; VSEND;
      MAXL←PIC[1,PCLN]; FOR I←2 STEP 1 UNTIL NF DO MAXL←MAXL MAX PIC[I,PCLN];
      FOR I←0 STEP 1 UNTIL MAXL-1 DO
	  BEGIN
	  INTEGER PT,RH,MI,MIP,LO,HI;
	  INTEGER ARRAY SCNLIN[0:117];

          FOR K←1 STEP 1 UNTIL NF DO IF I<PIC[K,PCLN] THEN
             BEGIN
             INTEGER ARRAY SCNLI[0:PIC[K,LNWD]+3];
             ARRYIN(PCH[K],SCNLI[0],PIC[K,LNWD]);
	     MI←(PIC[K,LNWD]-1)%2+1;
             IF K MOD 2=1 THEN MIP←(4224*(K-.5)/NF)/36+.5
                          ELSE MIP←(4224*(K-1.5)/NF)/36+.5+24;
             MIP←MIP+12;
             LO←(1-MI) MAX -MIP; HI←(PIC[K,LNWD]-1-MI) MIN (117-MIP);
	     FOR J←LO STEP 1 UNTIL HI DO SCNLIN[J+MIP]←SCNLIN[J+MIP] LOR SCNLI[J+MI];
             END;

          IF LINES THEN FOR K←0 STEP 1 UNTIL NF DO
             DPB(1,POINT(1,SCNLIN[(K*4223%NF)%36],(K*4223%NF) MOD 36));
	  IF LINES ∧ I=0 THEN ARRCLR(SCNLIN,-1);

	  RH←117; WHILE RH>0 ∧ SCNLIN[RH]=0 DO RH←RH-1;
	  IF SCNLIN[RH]≠0 THEN
	  FOR J←0 STEP 2 UNTIL RH DO
	     BEGIN
	     CMD←LDB(PT←POINT(8,SCNLIN[J],7)); VSEND;
	     CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;
	     CMD←((SCNLIN[J] LAND '17) LSH 4) LOR (SCNLIN[J+1] LSH -32); VSEND;
	     CMD←LDB(PT←POINT(8,SCNLIN[J+1],11)); VSEND;
	     IF J<116 THEN
		BEGIN
		CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;
		END;
	     END;
	  CMD←ONESTEP; VSEND;
	  END;
      RELEASE(OCH);
      END;
   END "BIT FILE";

END "VARIAN";